Modern programming languages explained